import bpy
from bpy.types import Operator
from 全局控制.Node.节点和插座基类.bl_UpdateNode import *
from 对象操作 import bl_对象变换帧

import 全局控制.Node.节点和插座基类.bl_节点基类 as 基类




E_类型枚举_属性 = [
	("hide_viewport", "hide_viewport", "", 1),
	("hide_render", "hide_render", "", 2),
]




		
class C_SN_物体属性set可视(基类.C_SN_基类):
	bl_dname = 'bl_node_物体可视set'
	bl_label = 'set 物体可视'
	
	m_隐藏方式 = bpy.props.EnumProperty(items=E_类型枚举_属性, default='hide_viewport', name="隐藏")
	def init(self, context):
		super(C_SN_物体属性set可视, self).f_init(context)
		self.inputs.new('C_NodeSocket_物体', name='对象')
		self.inputs.new('C_NodeSocket_bool', name='是否隐藏')
		
		
	def draw_buttons(self, context, layout):
		layout.prop(self, 'm_隐藏方式')
		

	def f_update(self, 是否向下传递=False, input插座=None):
		if self.inputs['对象'].is_linked == False : return
		#print('C_SN_物体属性set可视 fuck you')
		objs = self.inputs['对象'].f_getData()
		是否隐藏 = bool(self.inputs['是否隐藏'].f_getData())
		for obj in objs:
			if self.m_隐藏方式 == 'hide_viewport':
				obj.hide_viewport = 是否隐藏
			elif self.m_隐藏方式 == 'hide_render':
				obj.hide_render = 是否隐藏

			bl_对象变换帧.f_删除指定路径曲线的关键点(obj, [str(self.m_隐藏方式)])
		

class C_NODE_MENU_物体属性set可视(bpy.types.Operator):
	bl_idname = 'node.global_node_set_object_show'
	bl_label = '设置物体可视'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_SN_物体属性set可视', use_transform=True)
		return {'FINISHED'}






		
class C_SN_物体属性插帧可视(基类.C_SN_基类):
	bl_dname = 'bl_node_物体属性set'
	bl_label = '物体可视插帧'
	
	m_隐藏方式 = bpy.props.EnumProperty(items=E_类型枚举_属性, default='hide_viewport', name="隐藏")
	def init(self, context):
		super(C_SN_物体属性插帧可视, self).f_init(context)
		self.inputs.new('C_NodeSocket_物体', name='对象')
		self.inputs.new('C_NodeSocket_f', name='帧')
		self.inputs.new('C_NodeSocket_bool', name='是否隐藏')
		
	def draw_buttons(self, context, layout):
		layout.prop(self, 'm_隐藏方式')
		

	def f_update(self, 是否向下传递=False, input插座=None):
		if self.inputs['对象'].is_linked == False : return
		#print('fuck you')
		objs = self.inputs['对象'].f_getData()
		是否隐藏 = self.inputs['是否隐藏'].f_getData()

		帧 = self.inputs['帧'].f_getData()
		是否隐藏 = bool(self.inputs['是否隐藏'].f_getData())
		#print('帧 = ', 帧)
		for obj in objs:
			f = bl_对象变换帧.f_物体数据插帧(obj, str(self.m_隐藏方式), 'Disable View', 帧=帧, 值=是否隐藏)
			f.keyframe_points[-1].interpolation = 'CONSTANT'
			#bl_对象变换帧.f_删除指定路径曲线的关键点(obj, [str(self.m_隐藏方式)])
			

class C_NODE_MENU_物体属性插帧可视(bpy.types.Operator):
	bl_idname = 'node.global_node_set_object_keyframe_insert'
	bl_label = '插帧物体可视'
	bl_options = {'REGISTER', 'UNDO'}
	def execute(operator, context):
		bpy.ops.node.add_node(type='C_SN_物体属性插帧可视', use_transform=True)
		return {'FINISHED'}





classes = (
	C_SN_物体属性set可视,
	C_NODE_MENU_物体属性set可视,

	C_SN_物体属性插帧可视,
	C_NODE_MENU_物体属性插帧可视,
	
)


def register():
	for c in classes:
		bpy.utils.register_class(c)
		
def unregister():
	for c in classes:
		bpy.utils.unregister_class(c)

	

